//
// Created by 郝正辉 on 2020/11/22.
//

#ifndef C_TEST_CHTBL_H
#define C_TEST_CHTBL_H

#include "list.h"

typedef struct CHTbl_ {
    int buckets;

    int (*h)(const void *key);

    int (*match)(const void *key, const void *key2);

    void (*destroy)(void *data);

    int size;
    List *table;
} CHTbl;

int chtbl_init(CHTbl *htbl,
               int buckets,
               int(*h)(const void *key),
               int(*match)(const void *key1, const void *key2),
               void (*destroy)(void *data)
);

void chtbl_destroy(CHTbl *htbl);

int chtbl_insert(CHTbl *htbl, const void *data);

int chtbl_remove(CHTbl *htbl, void **data);

int chtbl_loopup(const CHTbl *htbl, void **data);

#define chtbl_size(htbl) ((htbl)->size)

#endif //C_TEST_CHTBL_H
